# -*- coding: utf-8 -*- 
# @project : 《Atcoder》
# @Author : created by bensonrachel on 2021/7/11
# @File : 129 C - Typical Stairs.py

"""
动态规划：青蛙跳台阶问题，加了一个条件就是有些台阶不能跳
主要思路没有问题，不能跳的台阶就为0了。

不能ac的问题：没注意到1这个位置的
超时的问题：用了数组，然后（*）处等于一个循环的查询，这样整个程序就会双循环，会超时
所以必须使用hash表，在python里字典可以完成，这样达到查询O（1）。这样就不会超时

"""

MOD = 10 ** 9 + 7

def re(n,char: {}):
    dp = [0]*(n+1)
    dp[0]=1
    for i in range(1,n+1):
        if(i in char): continue#这里char用数组会超时！！！（*）
        if(i == 1):
            dp[1] = dp[0]
        else:
            dp[i] = dp[i-1]+dp[i-2]
            dp[i] = dp[i]%MOD
    #print(char)
    print(dp[n]%MOD)

if __name__ == '__main__':
    N, M = map(int, input().split())
    char = {int(input()) for _ in range(M)}
    #用hash表不会超时
    re(N,char)

"""
但当列表数据过多时，需要查询第n个数据，其性能则为O(n)，此时字典就登场了，以其强大的底层结构，可以做到查询为O(1)，即常量查询，那原因是什么呢？字典的快是建立在用空间换时间，切记！
"""